python调用libpcap

您所在的位置:网站首页 python winpcap python调用libpcap

python调用libpcap

2023-11-19 17:04| 来源: 网络整理| 查看: 265

展开全部

一提到Python获取数据包的方式,相信很多Python爱好者会利用62616964757a686964616fe4b893e5b19e31333361323565Linux的libpcap软件包或利用Windows下的WinPcap可移植版的方式进行抓取数据包,然后再利用dpkt软件包进行协议分析,我们这里想换一个角度去思考:

1. Python版本的pcap存储内存数据过小,也就是说缓存不够,在高并发下容易发生丢包现象,其实C版本的也同样存在这样的问题,只不过Python版本的缓存实在是过低,让人很郁闷。

2. dpkt协议分析并非必须,如果你对RFC 791和RFC 793等协议熟悉的话,完全可以使用struct.unpack的方式进行分析。

如果你平常习惯使用tcpdump抓取数据包的话,完全可以使用它来代替pcap软件包,只不过我们需要利用tcpdump将抓取的数据以pcap格式进行保存,说道这里大家一定会想到Wireshark工具,具体命令如下:

tcpdump dst 10.13.202.116 and tcp dst port 80 -s 0 -i eth1 -w ../pcap/tcpdump.pcap -C 1k -W 5

我们首先需要对pcap文件格式有所了解,具体信息大家可以参考其他资料文档,我这里只说其重要的结构体组成,如下:

sturct pcap_file_header

{

DWORD magic;

WORD version_major;

WORD version_minor;

DWORD thiszone;

DWORD sigfigs;

DWORD snaplen;

DWORD linktype;

}

struct pcap_pkthdr

{

struct timeval ts;

DWORD caplen;

DWORD len;

}

struct timeval

{

DWORD GMTtime;

DWORD microTime;

}

这里需要说明的一点是,因为在Python的世界里一切都是对象,所以往往Python在处理数据包的时候感觉让人比较麻烦。Python提供了几个libpcapbind,http://monkey.org/~dugsong/pypcap/这里有 一个最简单的。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用。一个规范的抓包过程:

import pcap

import dpkt

pc=pcap.pcap() #注,参数可为网卡名,如eth0

pc.setfilter('tcp port 80'



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3